package slice

// Min 返回最小值
// 该方法会假设你至少会传入一个值
// 在使用 float32 或者 float64 的时候要小心精度问题
func Min[T Numbers](src []T) T {
	var zero T
	if len(src) == 0 {
		return zero
	}

	res := src[0]
	left := 0
	right := len(src) - 1
	for left <= right {
		if src[left] < res {
			res = src[left]
		}
		if src[right] < res {
			res = src[right]
		}
		left++
		right--
	}
	return res
}

// Max 返回最小值
// 该方法会假设你至少会传入一个值
// 在使用 float32 或者 float64 的时候要小心精度问题
func Max[T Numbers](src []T) T {
	var zero T
	if len(src) == 0 {
		return zero
	}

	res := src[0]
	left := 0
	right := len(src) - 1
	for left <= right {
		if src[left] > res {
			res = src[left]
		}
		if src[right] > res {
			res = src[right]
		}
		left++
		right--
	}
	return res
}

// Sum 求和
// 在使用 float32 或者 float64 的时候要小心精度问题
func Sum[T Numbers](src []T) T {
	var sum T
	for _, s := range src {
		sum += s
	}
	return sum
}
